Kiến trúc Hạt_nhân_Linux

Xem thêm: vmlinux
Bản đồ của Linux kernel

Hạt nhân Linux là một hạt nhân nguyên khối, hỗ trợ đa nhiệm được ưu tiên thực sự (cả ở chế độ người dùng và, kể từ series 2.6, ở chế độ nhân[55][56]),bộ nhớ ảo, thư viện dùng chung, demand loading, chia sẻ thực thi sao chép ghi (thông qua KSM), quản lý bộ nhớ, bộ giao thức Internet và phân luồng

Trình điều khiển thiết bị và phần mở rộng kernel chạy trong không gian kernel (ring 0 trong nhiều kiến trúc CPU), với toàn quyền truy cập vào phần cứng, mặc dù một số ngoại lệ chạy trong không gian người dùng, ví dụ: hệ thống file dựa trên FUSE/CUSE, và các phần của UIO.[57][58] Hệ thống đồ họa mà hầu hết mọi người sử dụng với Linux không chạy trong kernel. Không giống như các hạt nhân nguyên khối tiêu chuẩn, trình điều khiển thiết bị dễ dàng được cấu hình dưới dạng các mô-đun và được tải hoặc không tải trong khi hệ thống đang chạy. Ngoài ra, không giống như các hạt nhân nguyên khối tiêu chuẩn, trình điều khiển thiết bị có thể được xử lý trước trong một số điều kiện nhất định; tính năng này đã được thêm vào để xử lý các ngắt phần cứng một cách chính xác và để hỗ trợ tốt hơn cho đa xử lý đối xứng.[56] Theo lựa chọn, nhân Linux không có Giao diện nhị phân ứng dụng.[59]

Phần cứng cũng được tích hợp vào hệ thống phân cấp file. Giao diện trình điều khiển thiết bị với các ứng dụng người dùng thông qua một mục trong thư mục /dev hoặc /sys .[60] Thông tin quá trình cũng được ánh xạ tới hệ thống file thông qua thư mục /proc.[60]

Ngôn ngữ lập trình

Linux được viết bằng một phiên bản của ngôn ngữ lập trình C hỗ trợ bởi GCC (đã giới thiệu một số phần mở rộng và thay đổi cho tiêu chuẩn C), cùng với một số phần ngắn viết bằng hợp ngữ (trong cú pháp "AT&T-style" của GCC) cho kiến trúc đích. Bởi vì sự hỗ trợ mở rộng của C mà nó được viết, GCC trong một thời gian dài là trình biên dịch có thể dịch được đúng hạt nhân Linux.
Nhiều ngôn ngữ khác được sử dụng trong nhiều cách, chủ yếu liên quan đến quá trình biên dịch. Bao gồm Perl, Python và nhiều loại shell scripting.

Trình biên dịch tương thích

GCCtrình biên dịch mặc định cho nguồn nhân Linux. Năm 2014, Intel ttuyên bố đã sửa đổi kernel để trình biên dịch C của họ cũng có khả năng biên dịch hạt nhân.[61] Có một báo cáo thành công như vậy trong năm 2009, với phiên bản kernel đã được sửa đổi 2.6,22.[62][63]

Từ năm 2010, nỗ lực đã được tiến hành để xây dựng nhân Linux với Clang, một trình biên dịch thay thế cho ngôn ngữ C;[64] kể từ ngày 12 tháng 4 năm 2014, kernel chính thức gần như có thể được biên dịch bằng Clang.[65][66] Dự án dành riêng cho nỗ lực này được đặt tên là LLVMLinux theo cơ sở hạ tầng trình biên dịch LLVM mà Clang được xây dựng.[67] LLVMLinux không nhằm mục đích phân nhánh hạt nhân Linux hoặc LLVM, do đó, đây là một siêu dự án bao gồm các bản vá cuối cùng được gửi cho các dự án ngược dòng. Bằng cách cho phép nhân Linux được Clang biên dịch, trong số các ưu điểm khác, được biết đến với khả năng biên dịch nhanh hơn so với GCC, các nhà phát triển nhân có thể được hưởng lợi từ quy trình làm việc nhanh hơn do thời gian biên dịch ngắn hơn.[68]

Giao diện

Bốn giao diện được phân biệt: hai bên trong kernel và hai ở giữa kernel và không gian người dùng.

Tuân thủ các tiêu chuẩn là một chính sách chung cho các phần bên trong của nhân Linux. Một quy tắc khác là một thành phần hạt nhân không được chấp nhận vào dòng chính của nhân Linux nếu chỉ có phần mềm không gian người dùng độc quyền sử dụng thành phần đó.

Kernel-to-userspace API

Bài chi tiết: POSIXSingle UNIX Specification

Source code portability ensures that a C program written by conforming to a standard can be successfully compiled and run on any system that also conforms to the same standard. The relevant standards, aiming to achieve source code portability of programs, that the development of the Linux kernel, the GNU C Library, and associated utilities try to adhere to, are POSIX and the Single UNIX Specification.

The Linux kernel API of the Linux kernel, representing the kernel's system call interface, is composed of the available system calls.

Kernel-to-userspace ABI

Bài chi tiết: Linux Standard Base

Binary portability shall guarantee that any program once compiled for a given hardware platform, can be run in its compiled form on any other hardware platform that conforms to the standard. Binary portability is an essential requirement for the commercial viability of independent software vendor (ISV) applications built for the operating systems based on the Linux kernel. Binary compatibility is much more demanding than source code portability; as of February 2014, the only standard concerning itself with binary compatibility is the Linux Standard Base (LSB).

In-kernel API

At XDC2014, Alex Deucher from AMD announced the unified kernel-mode driver.[69] The proprietary Linux graphic driver, libGL-fglrx-glx, will share the same DRM infrastructure with Mesa 3D. As there is no stable in-kernel ABI, AMD had to constantly adapt the former binary blob used by Catalyst.

There are several kernel internal APIs utilized between the different subsystems and subsystems of subsystems. Some of them have been kept stable over several releases, others have not. There are no guarantees regarding the in-kernel APIs. Maintainers and contributors are free to augment or change them at any time.[70]

Examples of in-kernel APIs include software frameworks/APIs for the following classes of device drivers:

In-kernel ABI

The Linux kernel developers choose not to maintain a stable in-kernel ABI.[72]

Tài liệu tham khảo

WikiPedia: Hạt_nhân_Linux http://apcmag.com/node/6735/ http://www.computerworlduk.com/applications/are-to... http://www.extremetech.com/computing/190959-shells... http://www.gartner.com/newsroom/id/2875017 http://www.gisselberglawfirm.com/downloads/linux.p... http://www.h-online.com/open/features/What-s-new-i... http://www.idc.com/getdoc.jsp?containerId=prUS2518... http://www.infoworld.com/article/2655630 http://www.linuxjournal.com/article/2098 http://www.linuxjournal.com/article/2425/